package com.example.demo.entity;

import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.codec.digest.DigestUtils;

/**
 * <p>
 * 用户表
 * </p>
 *
 * @author Mr.we
 * @since 2024-05-28
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "Users对象", description = "用户表")
public class Users extends User implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("用户ID, 主键")
    @TableId(value = "User_id", type = IdType.AUTO)
    private Long userId;

    @ApiModelProperty("获取微信登录的OpenID")
    private String openId;

    @ApiModelProperty("用户名")
    private String userName;

    @ApiModelProperty("密码, 加密存储")
    private String userPassword;

    @ApiModelProperty("用户头像")
    private String userHeaderimg;

    @ApiModelProperty("电子邮件")
    private String email;

    @ApiModelProperty("联系电话")
    private String phoneNumber;

    @ApiModelProperty("验证码")
    private String code;

//    @ApiModelProperty("创建日期")
//    private LocalDateTime createDate;
//
//    @ApiModelProperty("修改日期，默认为当前时间戳，更新时自动更新")
//    private LocalDateTime updateDate;


    @ApiModelProperty("盐值")
    private String salt;

    // 生成盐值和加密密码的方法(注册用)
    @Override
    public void setPassword(String password) {
        this.salt = UUID.randomUUID().toString(); // 使用UUID生成盐值
        this.userPassword = encryptPassword(password); // 加密密码
    }

    // 解密并验证密码的方法(登录用)
    public boolean validatePassword(String password) {
        String encryptedInput = encryptPassword(password);
        return encryptedInput.equals(this.userPassword);
    }

    // 加密方法，这里使用了MD5，实际应用中可能需要更安全的哈希函数
    private String encryptPassword(String password) {
        return DigestUtils.md5Hex(salt + password);
    }

}
